define(["jquery", "bootstrap", "backend", "table", "form"], function ($, undefined, Backend, Table, Form) {
  var Controller = {
    index: function () {
      // 初始化表格参数配置
      Table.api.init({
        extend: {
          index_url: "fssy/specialdisease/index" + location.search,
          add_url: "fssy/specialdisease/add",
          edit_url: "fssy/specialdisease/edit",
          del_url: "fssy/specialdisease/del",
          multi_url: "fssy/specialdisease/multi",
          import_url: "fssy/specialdisease/import",
          table: "fssy_specialdisease",
        },
      });

      var table = $("#table");

      // 初始化表格
      table.bootstrapTable({
        url: $.fn.bootstrapTable.defaults.extend.index_url,
        pk: "id",
        sortName: "id",
        fixedColumns: true,
        fixedRightNumber: 1,
        searchFormVisible: true, //是否始终显示搜索表单
        columns: [
          // 定义表格列配置
          [
            // 启用复选框列
            { checkbox: true },

            // ID列，显示数据库中的id字段
            { field: "id", title: __("Id") },

            // 区域ID列，显示数据库中的region_id字段
            // { field: 'region_id', title: __('Region_id') },

            // 疾病ID名称列，显示数据库中的diseaseidname_id字段
            // { field: 'diseaseidname_id', title: __('Diseaseidname_id') },

            // 名称列，显示数据库中的name字段，使用LIKE操作符进行模糊搜索
            { field: "name", title: __("Name"), operate: "LIKE" },

            // 性别列，显示数据库中的gender_data字段，使用下拉列表进行精确搜索
            {
              field: "gender_data",
              title: __("Gender_data"),
              searchList: { 男: __("Gender_data 男"), 女: __("Gender_data 女") },
              formatter: Table.api.formatter.label,
            },

            // 居民或职工列，显示数据库中的resident_or_employeed_data字段，使用下拉列表进行精确搜索
            {
              field: "resident_or_employeed_data",
              title: __("身份"),
              searchList: { 居民: __("居民"), 职工: __("职工") },
              formatter: Table.api.formatter.label,
            },

            // 电话号码列，显示数据库中的phone_number字段，使用LIKE操作符进行模糊搜索
            { field: "phone_number", title: __("Phone_number"), operate: "LIKE" },

            // 身份证号码列，显示数据库中的id_number字段，使用LIKE操作符进行模糊搜索
            { field: "id_number", title: __("Id_number"), operate: "LIKE" },

            // 医保卡号码列，显示数据库中的medical_card_number字段，使用LIKE操作符进行模糊搜索
            { field: "medical_card_number", title: __("Medical_card_number"), operate: "LIKE" },

            // 申请病种代码及名称列
            { field: "dictsdiseaseidname.disease_id_name", title: __("申请病种代码及名称"), operate: "LIKE", formatter: Table.api.formatter.flag },

            // 定点医院列，显示数据库中的designated_hospital字段，使用LIKE操作符进行模糊搜索
            { field: "designated_hospital", title: __("Designated_hospital"), operate: "LIKE" },

            // 享受开始日期列，显示数据库中的benefit_start_date字段，使用范围日期时间选择器进行搜索
            {
              field: "benefit_start_date",
              title: __("Benefit_start_date"),
              operate: "RANGE",
              addclass: "datetimerange",
              autocomplete: false,
            },

            // 专家一列，显示数据库中的expert_one字段，使用LIKE操作符进行模糊搜索
            { field: "dictsexpert1.expert", title: __("Expert_one"), operate: "LIKE" },

            // 专家二列，显示数据库中的expert_two字段，使用LIKE操作符进行模糊搜索
            { field: "dictsexpert2.expert", title: __("Expert_two"), operate: "LIKE" },

            // 区域
            { field: "dictsregion.region", title: __("区域"), operate: "LIKE", formatter: Table.api.formatter.flag },

            // 诊断列，显示数据库中的diagnosis字段，使用LIKE操作符进行模糊搜索，内容较多时自动隐藏
            {
              field: "diagnosis",
              title: __("Diagnosis"),
              operate: "LIKE",
              table: table,
              class: "autocontent",
              formatter: Table.api.formatter.content,
            },

            // 类别列，显示数据库中的category_data字段，使用下拉列表进行精确搜索
            {
              field: "category_data",
              title: __("Category_data"),
              searchList: { 肿瘤: __("肿瘤"), 结核: __("结核") },
              formatter: Table.api.formatter.label,
            },

            // 操作者列，显示数据库中的operator字段，使用LIKE操作符进行模糊搜索
            {
              field: "operator",
              title: __("Operator"),
              operate: "LIKE",
              cellStyle: function (value, row, index) {
                return { css: { color: "#FF790D", "font-weight": "bold" } };
              },
            },

            // 手术时间列，显示数据库中的operation_time字段，使用范围日期时间选择器进行搜索
            {
              field: "operation_time",
              title: __("Operation_time"),
              operate: "RANGE",
              addclass: "datetimerange",
              autocomplete: false,
            },

            // 备注列，显示数据库中的remarks_data字段，使用下拉列表进行精确搜索
            {
              field: "remarks_data",
              title: __("备注"),
              searchList: { 备案: __("备案"), 未备案: __("未备案"), 备案时间错: __("备案时间错") },
              formatter: Table.api.formatter.label,
            },

            // 创建时间列，显示数据库中的createtime字段，使用范围日期时间选择器进行搜索
            {
              field: "createtime",
              title: __("Createtime"),
              operate: "RANGE",
              addclass: "datetimerange",
              autocomplete: false,
              formatter: Table.api.formatter.datetime,
            },

            // 更新时间列，显示数据库中的updatetime字段，使用范围日期时间选择器进行搜索
            {
              field: "updatetime",
              title: __("Updatetime"),
              operate: "RANGE",
              addclass: "datetimerange",
              autocomplete: false,
              formatter: Table.api.formatter.datetime,
            },

            // 操作列，包含编辑、删除等操作按钮
            {
              field: "operate",
              title: __("Operate"),
              table: table,
              events: Table.api.events.operate,
              formatter: Table.api.formatter.operate,
            },
          ],
        ],
      });

      // 为表格绑定事件
      Table.api.bindevent(table);
    },

    add: function () {
      $(document).ready(function () {
        // console.log("#c-operator = ", $("#c-operator")); // 检查是否存在
        // // 添加时获取当前用户名 赋值给'操作员' =>  Add
        // $.ajax({
        //   url: "/TcQozAZEFm.php/fssy/specialdisease/currentUser",
        //   method: "GET",
        //   success: function (data) {
        //     console.log("成功 = ", data);
        //     $("#c-operator").val(data.user);
        //   },
        //   error: function (xhr, status, error) {
        //     console.error("Error:", error);
        //   },
        // });
      });

      Controller.api.bindevent();
    },

    edit: function () {
      Controller.api.bindevent();
    },

    api: {
      bindevent: function () {
        Form.api.bindevent($("form[role=form]"));
      },
    },
  };

  $(document).ready(function () {
    // 在输入框失去焦点时验证身份证号码 =>  Add 和 Edit
    $("#c-id_number").blur(function () {
      var idNumber = $("#c-id_number").val();
      console.log(idNumber); // 输出输入框的值
      if (!validateIDNumber(idNumber)) {
        Layer.alert("🆔 身份证号码无效,请重新输入。");
      }
    });

    // 验证手机号码  =>  Add 和 Edit
    $("#c-phone_number").blur(function () {
      var phoneNumber = $("#c-phone_number").val();
      console.log(phoneNumber); // 输出输入框的值
      if (!validatePhoneNumber(phoneNumber)) {
        Layer.alert("📱 手机号码无效,请重新输入。");
      }
    });

    // 获取id="btn-submit"按钮点击事件
    $("#btn-submit-add, #btn-submit-edit").click(function (event) {
      console.log("!!!!!!!!!!");
      var regionId = $("#c-region_id").val();
      var diseaseidname = $("#c-diseaseidname_id").val();
      var idNumber = $("#c-id_number").val();
      var phoneNumber = $("#c-phone_number").val();

      // 验证 姓名 是否为空
      var name = $("#c-name").val();
      if (name === "") {
        Layer.alert("姓名不能为空。");
        return false;
      }

      // 手机号不能为空
      if (phoneNumber === "") {
        Layer.alert("手机号不能为空。");
        return false;
      }

      // 验证手机号码 和 身份证号码 是否有效
      if (!validatePhoneNumber(phoneNumber)) {
        Layer.alert("📱 手机号码无效,请重新输入。");
        return false;
      }

      // 身份证号不能为空
      if (idNumber === "") {
        Layer.alert("身份证号不能为空。");
        return false;
      }

      // 验证身份证号码是否有效
      if (!validateIDNumber(idNumber)) {
        Layer.alert("🆔 身份证号码无效,请重新输入。");
        return false;
      }

      // 验证 病种代码及名称 是否选择
      if (diseaseidname === "") {
        Layer.alert("请病种代码及名称。不能为空");
        return false;
      }

      // 验证 专家一 和 专家二 是否相等
      var expertOne = $("#c-expert_one").val();
      var expertTwo = $("#c-expert_two").val();
      if (expertOne === expertTwo) {
        Layer.alert("专家一 和专家二 不能为空 且不能相同。");
        return false;
      }

      // 验证区域是否选择
      if (regionId === "") {
        Layer.alert("请选择区域。不能为空");
        return false;
      }
    });
  });

  // 身份证验证函数
  function validateIDNumber(idNumber) {
    // console.log('!!!!!!!!!!!!!!!!!!!!!!!');
    const idNumberRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
    if (!idNumberRegex.test(idNumber)) {
      return false;
    }
    // 进一步验证身份证号码的有效性
    if (!checkIDNumber(idNumber)) {
      return false;
    }
    return true;
  }

  function checkIDNumber(idNumber) {
    if (idNumber.length === 18) {
      const weightFactor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
      const checkCode = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"];
      let sum = 0;
      for (let i = 0; i < 17; i++) {
        sum += parseInt(idNumber[i], 10) * weightFactor[i];
      }
      const calculatedCheckCode = checkCode[sum % 11];
      if (calculatedCheckCode !== idNumber[17].toUpperCase()) {
        return false;
      }
    }
    return true;
  }

  // 手机号码验证函数
  function validatePhoneNumber(phoneNumber) {
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phoneNumber)) {
      return false;
    }
    return true;
  }

  return Controller;
});
